home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Very Best of Atari Inside
/
The Very Best of Atari Inside 1.iso
/
mint
/
mntinc25
/
falcon.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-12
|
12KB
|
352 lines
/*
* GNU-C Bindings for Falcon XBIOS functions
* -- hyc 11-9-92 (uunet!hanauma.Jpl.Nasa.Gov!hyc)
*/
#ifndef _OSBIND_H
#include <osbind.h>
#endif
#ifndef trap_14_wwwwww
#define trap_14_wwwwww(n,a,b,c,d,e) \
({ \
register long retvalue __asm__("d0"); \
short _a = (short)(a); \
short _b = (short)(b); \
short _c = (short)(c); \
short _d = (short)(d); \
short _e = (short)(e); \
\
__asm__ volatile \
("\
movw %4,sp@-; \
movw %3,sp@-; \
movw %2,sp@-; \
movw %1,sp@-; \
movw %0,sp@- " \
:: "r"(_a), "r"(_b), "r"(_c), "r"(_d), "r"(_e)); \
\
__asm__ volatile \
("\
movw %1,sp@-; \
trap #14; \
lea sp@(12),sp" \
: "=r"(retvalue) \
: "g"(n) \
: "d0", "d1", "d2", "a0", "a1", "a2"); \
retvalue; \
})
#endif
/*
* Video
*/
/* Video mode codes */
#define VERTFLAG 0x100 /* double-line on VGA, interlace on ST/TV */
#define STMODES 0x080 /* ST compatible */
#define OVERSCAN 0x040 /* Multiply X&Y rez by 1.2, ignored on VGA */
#define PAL 0x020 /* PAL if set, else NTSC */
#define VGA 0x010 /* VGA if set, else TV mode */
#define COL80 0x008 /* 80 column if set, else 40 column */
#define NUMCOLS 7 /* Mask for number of bits per pixel */
#define BPS16 4
#define BPS8 3
#define BPS4 2
#define BPS2 1
#define BPS1 0
/* Montype return values */
enum montypes = {STmono=0, STcolor, VGAcolor, TVcolor};
/* VsetSync flags - 0=internal, 1=external */
#define VID_CLOCK 1
#define VID_VSYNC 2
#define VID_HSYNC 4
#undef Setscreen
#define Setscreen(lscrn,pscrn,rez,mode) \
(short)trap_14_wllww((short)5,(long)(lscrn),(long)(pscrn), \
(short)(rez),(short)(mode))
#define Vsetmode(mode) \
(short)trap_14_ww((short)88,(short)(mode))
#define Montype() \
(short)trap_14_w((short)89)
#define VgetSize(mode) \
(long)trap_14_ww((short)91,(short)(mode))
#define VsetSync(ext) \
(void)trap_14_ww((short)90,(short)(ext))
#define VsetRGB(index,count,array) \
(void)trap_14_wwwl((short)93,(short)(index),(short)(count), \
(long *)(array))
#define VgetRGB(index,count,array) \
(void)trap_14_wwwl((short)94,(short)(index),(short)(count), \
(long *)(array))
#define VsetMask(andmask,ormask) \
(void)trap_14_www((short)150,(short)(andmask),(short)(ormask))
/*
* Sound
*/
/* _SND cookie values */
#define SND_PSG 0x01 /* Yamaha PSG */
#define SND_8BIT 0x02 /* 8 bit DMA stereo */
#define SND_16BIT 0x04 /* 16 bit CODEC */
#define SND_DSP 0x08 /* DSP */
#define SND_MATRIX 0x10 /* Connection Matrix */
/* XXX Docs say Falcon shows 0x3f. What does bit 0x20 mean ??? */
/*
* Sound data memory layout - samples are all signed values
*
* (each char = 1 byte, 2 chars = 1 word)
* 1 16 bit stereo track: LLRRLLRRLLRRLLRR
* 1 8 bit stereo track: LRLRLRLR
* 2 16 bit stereo tracks: L0R0L1R1L0R0L1R1
* etc...
*/
/* Setbuffer regions */
#define SR_PLAY 0 /* Set playback registers */
#define SR_RECORD 1 /* Set record registers */
/* Soundcmd Modes */
#define LTATTEN 0 /* Left-channel output attenuation */
#define RTATTEN 1 /* Right channel atten */
#define LTGAIN 2 /* Left input gain */
#define RTGAIN 3 /* Right channel gain */
/* gain and attenuation in 1.5db units, 0x00V0, V:0-15 */
#define ADDERIN 4 /* Select inputs to adder 0=off, 1=on */
#define ADCIN 1 /* Input from ADC */
#define MATIN 2 /* Input from connection matrix */
#define ADCINPUT 5 /* Select input to ADC, 0=mic, 1=PSG */
#define ADCRT 1 /* Right channel input */
#define ADCLT 2 /* Left input */
#define SETPRESCALE 6 /* Set TT compatibility prescaler */
#define PREMUTE 0 /* was /1280, now is invalid, mutes */
#define PRE1280 PREMUTE
#define PRE640 1 /* divide by 640 */
#define PRE320 2 /* / 320 */
#define PRE160 3 /* / 160 */
/* Record/Playback modes */
#define STEREO8 0 /* 8 bit stereo */
#define STEREO16 1 /* 16 bit stereo */
#define MONO8 2 /* 8 bit mono */
/* Record/Playback tracks range from 0 to 3 */
/* XXX Doc for Settracks could be clearer. Can we individually set, e.g.,
tracks 0 & 2 for playback, or must track selections be contiguous? */
/* Sound buffer interrupts */
/* sources */
#define SI_TIMERA 0 /* Timer A interrupt */
#define SI_MFPI7 1 /* MFP interrupt 7 */
/* causes */
#define SI_NONE 0 /* No interrupts */
#define SI_PLAY 1 /* Intr at end of play buffer */
#define SI_RECORD 2 /* Intr at end of record buffer */
#define SI_BOTH 3 /* Interrupt for either play or record */
/* Buffoper flags */
#define SB_PLA_ENA 1 /* Play enable */
#define SB_PLA_RPT 2 /* Play repeat (continuous loop mode) */
#define SB_REC_ENA 4 /* Record enable */
#define SB_REC_RPT 8 /* Record repeat */
/* Dsptristate - 0=tristate, 1=enable */
/* Gpio modes */
#define GPIO_SET 0 /* Set I/O direction, 0=in, 1=out */
#define GPIO_READ 1 /* Read bits - only 3 bits on gpio */
#define GPIO_WRITE 2 /* Write gpio data bits */
/* Devconnect (connection matrix) source devices */
#define DMAPLAY 0 /* DMA playback */
#define DSPXMIT 1 /* DSP transmit */
#define EXTINP 2 /* External input */
#define ADC 3 /* Microphone/PSG, see Soundcmd(ADCINPUT) */
/* Devconnect destination devices, bitmapped */
#define DMAREC 1 /* DMA record */
#define DSPRECV 2 /* DSP receive */
#define EXTOUT 4 /* External output */
#define DAC 8 /* Headphone, internal speaker, monitor */
/* Devconnect clock sources */
#define CLK25M 0 /* Internal 25.175 MHz clock */
#define CLKEXT 1 /* External clock */
#define CLK32M 2 /* Internal 32 MHz. Invalid for CODEC */
/* Devconnect clock prescaler values */
/* XXX Doc lists incorrect hz numbers for many of these... */
#define CLKOLD 0 /* TT compatible, see Soundcmd(SETPRESCALE) */
#define CLK50K 1 /* 49170 hz */
#define CLK33K 2 /* 32780 hz */
#define CLK25K 3 /* 24585 hz */
#define CLK20K 4 /* 19668 hz */
#define CLK16K 5 /* 16390 hz */
/* 6 (14049 hz) invalid for CODEC */
#define CLK12K 7 /* 12292 hz */
/* 8 (10927 hz) invalid for CODEC */
#define CLK10K 9 /* 9834 hz */
/* 10 (8940 hz) invalid for CODEC */
#define CLK8K 11 /* 8195 hz */
/* 12 (7565 hz) invalid */
/* 13 (7024 hz) invalid */
/* 14 (6556 hz) invalid */
/* 15 (6146 hz) invalid */
/* Sndstatus command */
#define SND_CHECK 0 /* Check current status */
#define SND_RESET 1 /* Reset sound system */
/*
* Reset effects: DSP tristated, gain=atten=0, matrix reset,
* ADDERIN=0, Mode=STEREO8, Play=Record=Monitor tracks=0,
* interrupts disabled, buffer operation disabled.
*/
/* Sndstatus status return */
#define SS_OK 0 /* No errors */
#define SS_CTRL 1 /* Invalid control field (Data assumed OK) */
#define SS_SYNC 2 /* Invalid sync format (mutes) */
#define SS_SCLK 3 /* Serial clock out of valid range (mutes) */
#define SS_RTCLIP 0x10 /* Right channel is clipping */
#define SS_LTCLIP 0x20 /* Left channel is clipping */
/* Structure used by Buffptr */
typedef struct SndBufPtr {
char *play;
char *record;
long reserve1;
long reserve2;
} SndBufPtr;
#define Locksnd() \
(long)trap_14_w((short)128)
#define Unlocksnd() \
(long)trap_14_w((short)129)
#define Setbuffer(region,beg,end) \
(long)trap_14_wwll((short)131,(short)(region),(long)(beg),(long)(end))
#define Soundcmd(mode,data) \
(long)trap_14_www((short)130,(short)(mode),(short)(data))
#define Setmode(stereo_mode) \
(long)trap_14_ww((short)132,(short)(stereo_mode))
#define Settracks(play,rec) \
(long)trap_14_www((short)133,(short)(play),(short)(rec))
#define Setmontracks(montrack) \
(long)trap_14_ww((short)134,(short)(montrack))
#define Setinterrupt(src_inter,cause) \
(long)trap_14_www((short)135,(short)(src_inter), \
(short)(cause))
#define Buffoper(mode) \
(long)trap_14_ww((short)136,(short)(mode))
#define Dsptristate(dspxmit,dsprec) \
(long)trap_14_www((short)137,(short)(dspxmit), \
(short)(dsprec))
#define Gpio(mode,data) \
(long)trap_14_www((short)138,(short)(mode),(short)(data))
#define Devconnect(src,dst,sclk,pre,proto) \
(long)trap_14_wwwwww((short)139,(short)(src),(short)(dst), \
(short)(sclk),(short)(pre),(short)(proto))
#define Sndstatus(reset) \
(long)trap_14_ww((short)140,(short)(reset))
#define Buffptr(ptr) \
(long)trap_14_wl((short)141,(long)(ptr))
/*
* DSP functions
*
* Don't even *think* of trying to use these without the manual!
*/
#define Dsp_DoBlock(data_in,size_in,data_out,size_out) \
(void)trap_14_wllll((short)96,(long)(data_in),(long)(size_in), \
(long)(data_out),(long)(size_out))
#define Dsp_BlkHandShake(data_in,size_in,data_out,size_out) \
(void)trap_14_wllll((short)97,(long)(data_in),(long)(size_in), \
(long)(data_out),(long)(size_out))
#define Dsp_BlkUnpacked(data_in,size_in,data_out,size_out) \
(void)trap_14_wllll((short)98,(long)(data_in),(long)(size_in), \
(long)(data_out),(long)(size_out))
#define Dsp_BlkWords(data_in,size_in,data_out,size_out) \
(void)trap_14_wllll((short)123,(long)(data_in),(long)(size_in), \
(long)(data_out),(long)(size_out))
#define Dsp_BlkBytes(data_in,size_in,data_out,size_out) \
(void)trap_14_wllll((short)124,(long)(data_in),(long)(size_in), \
(long)(data_out),(long)(size_out))
#define Dsp_MultBlocks(numsend,numrecv,sendblks,recvblks) \
(void)trap_14_wllll((short)127,(long)(numsend),(long)(numrecv), \
(long)(sendblks),(long)(recvblks))
#define Dsp_InStream(data_in,blksiz,numblks,blksdone) \
(void)trap_14_wllll((short)99,(long)(data_in),(long)(blksiz), \
(long)(numblks),(long)(blksdone))
#define Dsp_OutStream(data_out,blksiz,numblks,blksdone) \
(void)trap_14_wllll((short)100,(long)(data_out),(long)(blksiz), \
(long)(numblks),(long)(blksdone))
#define Dsp_IOStream(data_in,data_out,blkisiz,blkosiz,numblks,blksdone) \
(void)trap_14_wllllll((short)101,(long)(data_in),(long)(data_out),\
(long)(blkisiz),(long)(blkosiz),(long)(numblks), \
(long)(blksdone))
#define Dsp_SetVectors(rcvr,xmtr) \
(void)trap_14_wll((short)126,(long)(rcvr),(long)(xmtr))
#define Dsp_RemoveInterrupts(mask) \
(void)trap_14_ww((short)102,(short)(mask))
#define Dsp_GetWordSize() (long)trap_14_w((short)103)
#define Dsp_Lock() (long)trap_14_w((short)104)
#define Dsp_Unlock() (void)trap_14_w((short)105)
#define Dsp_Available(xmem,ymem) \
(void)trap_14_wll((short)106,(long)(xmem),(long)(ymem))
#define Dsp_Reserve(xmem,ymem) \
(void)trap_14_wll((short)107,(long)(xmem),(long)(ymem))
#define Dsp_LoadProg(file,ability,buffer) \
(long)trap_14_wlwl((short)108,(long)(file),(short)(ability), \
(long)(buffer))
#define Dsp_ExecProg(codeptr,codesiz,ability) \
(void)trap_14_wllw((short)109,(long)(codeptr),(long)(codesiz), \
(short)(ability))
#define Dsp_ExecBoot(codeptr,codesiz,ability) \
(void)trap_14_wllw((short)110,(long)(codeptr),(long)(codesiz), \
(short)(ability))
#define Dsp_LodToBinary(file,codeptr) \
(long)trap_14_wll((short)111,(long)(file),(long)(codeptr))
#define Dsp_TriggerHC(vector) \
(void)trap_14_ww((short)112,(short)(vector))
#define Dsp_RequestUniqueAbility() (long)trap_14_w((short)113)
#define Dsp_GetProgAbility() (long)trap_14_w((short)114)
#define Dsp_FlushSubroutines() (void)trap_14_w((short)115)
#define Dsp_LoadSubroutine(ptr,siz,ability) \
(long)trap_14_wllw((short)116,(long)(ptr),(long)(siz), \
(short)(ability))
#define Dsp_InqSubrAbility(ability) \
(long)trap_14_ww((short)117,(short)(ability))
#define Dsp_RunSubroutine(handle) \
(long)trap_14_ww((short)118,(short)(handle))
#define Dsp_Hf0(flag) \
(long)trap_14_ww((short)119,(short)(flag))
#define Dsp_Hf1(flag) \
(long)trap_14_ww((short)120,(short)(flag))
#define Dsp_Hf2() (long)trap_14_w((short)121)
#define Dsp_Hf3() (long)trap_14_w((short)122)
#define Dsp_HStat() (char)trap_14_w((short)125)